/*
 *  ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
 *  │Esc│   │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│  ┌┐    ┌┐    ┌┐
 *  └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘  └┘    └┘    └┘
 *  ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
 *  │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │
 *  ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
 *  │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │   │
 *  ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
 *  │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter  │               │ 4 │ 5 │ 6 │   │
 *  ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐     ├───┼───┼───┼───┤
 *  │ Shift  │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│  Shift   │     │ ↑ │     │ 1 │ 2 │ 3 │   │
 *  ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
 *  │ Ctrl│    │Alt │         Space         │ Alt│    │    │Ctrl│ │ ← │ ↓ │ → │ │   0   │ . │←─┘│
 *  └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
 *
 * @Descripttion: 路由配置文件，包含基础路由、动态路由和路由守卫配置。用于管理整个应用的页面导航和访问控制。
 * @version: 1.0.0
 * @Date: 2021-04-20 11:06:21
 * @Author: jekingxu@163.com
 * @LastEditTime: 2021-07-26 16:16:36
 * @HomePage: https://xuxiaowen.space/vue3-element-admin
 * @Github: https://github.com/xuxiaowengjt
 * 
 */

import { createRouter, createWebHashHistory } from 'vue-router'

// 导入各个模块的路由配置
import redirect from './modules/redirect'         // 重定向路由配置
import error from './modules/error'              // 错误页面路由配置
import login from './modules/login'              // 登录相关路由配置
import lock from './modules/lock'                // 锁屏相关路由配置
import home from './modules/home'                // 首页路由配置
import aboutSystem from './modules/aboutSystem'   // 系统相关路由配置
import parameterSetting from './modules/parameterSetting'  // 参数设置路由配置
import historyData from './modules/historyData'  // 历史数据路由配置
import devices from './modules/devices'          // 设备管理路由配置

/* 菜单栏的路由配置 */
/**
 * 固定路由配置
 * 这些路由始终显示，不需要动态判断权限
 * 包含首页等基础路由
 */
export const fixedRoutes = [...home]

/**
 * 动态路由配置
 * 根据用户角色和权限动态加载的路由
 * 包括：参数设置、历史数据、设备管理、系统管理等模块
 */
export const asyncRoutes = [
    ...parameterSetting,         // 参数设置模块路由
    ...(historyData || []),      // 历史数据模块路由（如果存在）
    ...devices,                  // 设备管理模块路由
    ...(aboutSystem || [])       // 系统管理模块路由（如果存在）
]

/**
 * 创建路由实例
 * 使用 hash 模式的路由（createWebHashHistory）
 * 配置基础路由表，包含：
 * 1. 根路由重定向到首页
 * 2. 重定向路由配置
 * 3. 登录相关路由
 * 4. 锁屏路由
 * 5. 固定路由
 * 6. 错误页面路由
 */
const router = createRouter({
    history: createWebHashHistory(),
    routes: [{
            path: '/',
            redirect: '/home',    // 根路径重定向到首页
        },
        ...redirect,              // 统一的重定向配置
        ...login,                 // 登录相关路由
        ...lock,                  // 锁屏相关路由
        ...fixedRoutes,           // 固定菜单路由
        ...error,                 // 错误页面路由
    ],
    /**
     * 路由滚动行为配置
     * @param {Object} to - 目标路由对象
     * @param {Object} from - 来源路由对象
     * @param {Object} savedPosition - 保存的位置信息（仅在浏览器的前进/后退操作时可用）
     * @returns {Object} 期望滚动到的位置
     */
    scrollBehavior(to, from, savedPosition) {
        if (savedPosition) {
            return savedPosition    // 如果存在保存的位置，则恢复到该位置
        } else {
            return { left: 0, top: 0 }  // 否则滚动到页面顶部
        }
    },
})

export default router